
import symbol from 'log-symbols';
import chalk from 'chalk';
import ora from 'ora';

import {
    notExistFold,
    prompt,
    downloadTemplate,
    updateJsonFile
} from './util';

let create = async (ProjectName) => {

    // 项目名不能为空
    if (ProjectName === undefined) {
        console.log(symbol.error, chalk.red('创建项目的时候，请输入项目名'));
    } else {
        // 如果文件名不存在则继续执行,否则退出
        notExistFold(ProjectName).then(() => {

            // 用户询问交互
            prompt().then((answer) => {

                /**
                 * 根据用户输入的配置信息下载模版&更新模版配置
                 * 下载模版比较耗时,这里通过ora插入下载loading, 提示用户正在下载模版
                 */
                let loading = ora('模板下载中...');
                loading.start('模板下载中...');

                const tmplateUrl = {
                    'vue-pc': 'direct:https://gitee.com/youzu-code/vue-pc-template.git',
                    'vue-mobile': 'direct:https://gitee.com/youzu-code/vue-mobile-template.git',
                    'react-pc': 'direct:https://gitee.com/youzu-code/react-pc-template.git',
                    'react-mobile': 'direct:https://gitee.com/youzu-code/react-mobile-template.git'
                }

                let Api = tmplateUrl[`${answer.frame}-${answer.platform}`];
                if (!Api) {
                    console.log(symbol.warning, chalk.yellow('没有匹配到模板！'));
                    process.exit(1);
                }

                downloadTemplate(ProjectName, Api)
                .then(() => {

                    loading.succeed('模板下载完成');

                    // 下载完成后,根据用户输入更新配置文件
                    const fileName = `${ProjectName}/package.json`;
                    answer.name = ProjectName;
                    updateJsonFile(fileName, answer)
                    .then(() => {
                        console.log(symbol.success, chalk.green('配置文件更新完的。'));
                    })
                }, (err) => {
                    console.log(err);
                    loading.fail('模板下载失败');
                });
            })
        });
    }
};

module.exports = create;

